﻿using Onshi.POS.AccesoDatos.Interfaces;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosClientes : ServicioDatosBase, IServicioDatosClientes
    {
        #region Metodos

        public DataSet Clientes_DevolverTodos(Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorId(Int32 idCliente, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorCodigo(String codigo, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorCodigo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Clientes_Insertar(Int32 idRubroCliente, Byte idTipoIva, Int32 idListaPrecioVenta, Int32 idVendedor, String codigo, String nombre, Decimal limiteDeuda, String cuit, String email, String sitioWeb, String observaciones, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdRubroCliente", idRubroCliente);
                cm.Parameters.AddWithValue("@IdTipoIva", idTipoIva);
                cm.Parameters.AddWithValue("@IdListaPrecioVenta", idListaPrecioVenta);
                cm.Parameters.AddWithValue("@IdVendedor", idVendedor);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@LimiteDeuda", limiteDeuda);
                cm.Parameters.AddWithValue("@Cuit", cuit);
                cm.Parameters.AddWithValue("@Email", email);
                cm.Parameters.AddWithValue("@SitioWeb", sitioWeb);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Modificar(Int32 idCliente, Int32 idRubroCliente, Byte idTipoIva, Int32 idListaPrecioVenta, Int32 idVendedor, String codigo, String nombre, Decimal limiteDeuda, String cuit, String email, String sitioWeb, String observaciones, Byte[] imagen, Boolean estaEliminado)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IdRubroCliente", idRubroCliente);
                cm.Parameters.AddWithValue("@IdTipoIva", idTipoIva);
                cm.Parameters.AddWithValue("@IdListaPrecioVenta", idListaPrecioVenta);
                cm.Parameters.AddWithValue("@IdVendedor", idVendedor);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@LimiteDeuda", limiteDeuda);
                cm.Parameters.AddWithValue("@Cuit", cuit);
                cm.Parameters.AddWithValue("@Email", email);
                cm.Parameters.AddWithValue("@SitioWeb", sitioWeb);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Parameters.AddWithValue("@EstaEliminado", estaEliminado);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 DomiciliosClientes_Insertar(Int32 idCliente, Byte idTipoDomicilio, Int32 idBarrio, String calle, String numero, String piso, String departamento)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IdTipoDomicilio", idTipoDomicilio);
                cm.Parameters.AddWithValue("@IdBarrio", idBarrio);
                cm.Parameters.AddWithValue("@Calle", calle);
                cm.Parameters.AddWithValue("@Numero", numero);
                cm.Parameters.AddWithValue("@Piso", piso);
                cm.Parameters.AddWithValue("@Departamento", departamento);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosClientes_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 TelefonosClientes_Insertar(Int32 idCliente, Byte idTipoTelefono, String codigoArea, String numero)
        {
            try
            {
                var cm = new SqlCommand("TelefonosClientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IdTipoTelefono", idTipoTelefono);
                cm.Parameters.AddWithValue("@CodigoArea", codigoArea);
                cm.Parameters.AddWithValue("@Numero", numero);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void TelefonosClientes_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("TelefonosClientes_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesTiposFormasPagos_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("ClientesTiposFormasPagos_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesTiposFormasPagos_Insertar(Int32 idCliente, Byte idTipoFormaPago)
        {
            try
            {
                var cm = new SqlCommand("ClientesTiposFormasPagos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IdTipoFormaPago", idTipoFormaPago);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesCamposPersonalizadosClientes_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("ClientesCamposPersonalizadosClientes_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesCamposPersonalizadosClientes_Insertar(Int32 idCliente, Int32 idCampoPersonalizadoCliente, String valor)
        {
            try
            {
                var cm = new SqlCommand("ClientesCamposPersonalizadosClientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCliente", idCliente);
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoCliente", idCampoPersonalizadoCliente);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_ModificarRubroCliente(Int32 idRubroClienteNuevo, Int32 idRubroClienteViejo)
        {
            try
            {
                var cm = new SqlCommand("Clientes_ModificarRubroCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdRubroClienteNuevo", idRubroClienteNuevo);
                cm.Parameters.AddWithValue("@IdRubroClienteViejo", idRubroClienteViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesCamposPersonalizadosClientes_EliminarPorCampoPersonalizadoCliente(Int32 idCampoPersonalizadoCliente)
        {
            try
            {
                var cm = new SqlCommand("ClientesCamposPersonalizadosClientes_EliminarPorCampoPersonalizadoCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoCliente", idCampoPersonalizadoCliente);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosClientes_ModificarBarrio(Int32 idBarrioNuevo, Int32 idBarrioViejo)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_ModificarBarrio", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdBarrioNuevo", idBarrioNuevo);
                cm.Parameters.AddWithValue("@IdBarrioViejo", idBarrioViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_ModificarVendedor(Int32 idVendedorNuevo, Int32 idVendedorViejo)
        {
            try
            {
                var cm = new SqlCommand("Clientes_ModificarVendedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdVendedorNuevo", idVendedorNuevo);
                cm.Parameters.AddWithValue("@IdVendedorViejo", idVendedorViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
